<?php namespace Common\Model;

use Hdphp\Model\Model;
class Category extends Model
{
	//操作数据表
	protected $table = "category";
	//自动验证
	protected $validate = array(
		array('cname','required','请输入分类名',3,3),
		array("cname","maxlen:10","分类名称不能超过10个字符",3,3),
		array("sort","num:1,123456","分类排序必须为数字",3,3),
	);
	
	/**
	 * 添加
	 */
	public function store()
	{
		//自动验证
		if(!$this->create()) return false;
		//执行添加
		return $this->add();
	}
	/**
	 *获得除了自己以及自己的所有子集数据
	*/
	public function getCateData($cid)
	{
		//1获得当前所有子集
		//数组数据，找哪一条数据的子集
		$cids = $this->getSon($this->get(),$cid);
		//2.将自己压入数组当中
		$cids[] = $cid;
		//3.获得除了自己以及自己所有的子集的数据
		//将数组转成字符串implode(',',$array)
		//参数：用什么来分隔，要处理的数组
		$cids = implode(',', $cids);
		//where("cid not in ($cids)"),获得不在cids里面的数据
		$data = $this->where("cid not in ($cids)")->get();
		//变成树状结构
		return Data::tree($data,"cname");
	}
	/**
	 * 找子集
	 */
	public function getSon($data,$cid)
	{
		//定义静态变量，为了结果不被覆盖，不丢失
		static $temp = array();//定义静态属性为空数组,接受foreach递归出的数组
		foreach ($data as $k => $v) {
			//条件成立的时候，当前这一条就是$cid这一条的子集
			if($cid==$v['pid'])
			{
				//将$v['cid']压给$temp
				$temp[]=$v['cid'];
				//递归调用自己，继续寻找子集
				$this->getSon($data,$v['cid']);
			}
		}
		return $temp;
	}
	/**
	 * 编辑分类
	 */
	public function edit()
	{
		//自动验证
		if(!$this->create()) return false;
		//执行编辑
		//编辑的条件：在模板的form表单中加隐藏域，name为主键字段，value为要修改的数据id
		return $this->save();
	}
	/**
	 * 删除
	 */
	public function del($cid)
	{
		//获得索要删除的数据的pid
		//pluck获取单一字段的值
		$pid = $this->where('cid','=',$cid)->pluck('pid');
		//执行删除
		$this->where('pid','=',$cid)->update(array('pid'=>$pid));
		//删除
		$this->where('cid','=',$cid)->delete();
	}
}
